<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>

	<body>
		<div>json是xml类型都是一种结构化的数据表示方式。json是JavaScript的一个严格子集，可以在很多语言中使用。 JSON语法的三种类型的值： 1简单值：可以在json中表示字符串、数值、布尔值和null。但是json不支持undefined。 10 "hello" true null 2对象： //普通对象 var box={ name:'lee', age:10 }; alert(box.name); //json对象 '{"name":"lee","age" :100}' 3数组： //普通 var box=[100,'lee',true]; //json '[100,"lee",true]'
		</div>
	</body>
	<script>
		var json = '[{"title" : "a", "num" : 1},{"title" : "b", "num" : 2}]';
		alert(typeof json);

		//使用eval()执行字符串里的js代码
		var box = eval(json); //解析json字符串，变成JavaScript代码
		alert(box[0].title);

		//注意eval()不安全

		//ie8以上的新方法

		// *****JSON.parse() 将json对象转为数组对象**************
		var box1 = JSON.parse(json);
		alert(box1[1].title);

		//****************JSON.stringify()将数组对象转为json对象************
		var box2 = [{
			title: 'a',
			num: 1
		}, {
			title: 'b',
			num: 2
		}];
		alert(typeof box2);
		var jsonBox = JSON.stringify(box2);
		alert(jsonBox);
		alert(typeof jsonBox);

		//stringify(第二个参数可以是一个数组也可以是一个函数)
		var box3 = [{
			title: 'lee',
			num: 1,
			height: 177
		}, {
			title: 'wang',
			num: 2,
			height: 188
		}];

		//数组中可以只保留需要的
		var jsonBox3 = JSON.stringify(box3, ['num', 'height']);
		alert(jsonBox3)

		//函数可以通过key操作值
		var jsonBox04 = JSON.stringify(box3, function(key, value) {
			if(key == 'title') {
				return 'Mr.' + value;
			} else {
				return value;
			}
		});
		alert(jsonBox04);

		//PS：火狐3.5和3.6在最初支持JSON的时候stringify方法有个小BUG，执行function会出错(但是几乎没有该版本了)

		//stringify 提供的第三个参数为保留缩进或增加符号
		var jsonBox05 = JSON.stringify(box3, ['title', 'num'], 4); //缩进4行
		alert(jsonBox05);

		var jsonBox06 = JSON.stringify(box3, ['title', 'num'], '----'); //缩进行为----填充
		alert(jsonBox06);

		//如果只是使用第一个和第三个参数

		var jsonBox07 = JSON.stringify(box3, null, 4);
		alert(jsonBox07);

		//******自定义过滤一些数据使用toJSON()方法，可以将某一数组对象指定返回某个值******
		var box4 = [{
			title: 'a',
			num: 1,
			height: 177,
			toJSON: function() { //只会返回 a
				return this.title;
			}
		}, {
			title: 'b',
			num: 2,
			height: 188,
			toJSON: function() { //只返回188
				return this.height;
			}
		}];
		var jsonBox08 = JSON.stringify(box4, null, 3);
		alert(jsonBox08); //["a",188]

		//ps:JSON序列化也有执行顺序首先执行toJSON()方法：如果使用了第二个参数，则执行这个方法，然后执行序列化过程
		//如：将键值对组成合法的JSON字符串，比如加上双引号。最后如果提供了缩进在执行缩进

		//******解析JSON字符串方法也可以接受第二个参数，这样可以在还原出JavaScript值得时候替换成自己想要的值******

		var jsonString = '[{"title" : "张三", "num" : 1},{"title" : "李四", "num" : 2}]';
		var boxS = JSON.parse(jsonString, function(key, value) {
			if(key == 'title') {
				return 'Mr.' + value;
			} else {
				return value;
			}
		});
		alert(boxS[0].title);//Mr.张三
		
		
	</script>

</html>